/***************** 有关栈slot说明  *****************
1 基于栈的虚拟机, 操作数和运算结果都会保存在栈中.
2 运行时栈是由Value数组模拟的,栈中元素称为slot.
3 有的指令使栈空间增大一些slot,有的则减小一些slot.
4 函数中的局部变量也要存储在栈中.
综上,函数所需要的栈空间需要连同函数内所有操作码对栈空间的需求一并统计.
操作码的行为是一定的,对栈的影响也是一定的,
因此在定义操作码时,以slot为单位,一并描述操作码对栈空间大小的影响.
下面以此格式定义操作码及相应影响:
   操作码 栈空间大小的影响(!!!注意,不是操作数)
*************************************************/
OPCODE_SLOTS(LOAD_CONSTANT, 1)
OPCODE_SLOTS(PUSH_NULL, 1)
OPCODE_SLOTS(PUSH_FALSE, 1)
OPCODE_SLOTS(PUSH_TRUE, 1)
OPCODE_SLOTS(LOAD_LOCAL_VAR, 1)
OPCODE_SLOTS(STORE_LOCAL_VAR, 0)
OPCODE_SLOTS(LOAD_UPVALUE, 1)
OPCODE_SLOTS(STORE_UPVALUE, 0)
OPCODE_SLOTS(LOAD_MODULE_VAR, 1)
OPCODE_SLOTS(STORE_MODULE_VAR, 0)
OPCODE_SLOTS(LOAD_THIS_FIELD, 1)
OPCODE_SLOTS(STORE_THIS_FIELD, 0)
OPCODE_SLOTS(LOAD_FIELD, 0)
OPCODE_SLOTS(STORE_FIELD, -1)
OPCODE_SLOTS(POP, -1)
OPCODE_SLOTS(CALL0, 0)
OPCODE_SLOTS(CALL1, -1)
OPCODE_SLOTS(CALL2, -2)
OPCODE_SLOTS(CALL3, -3)
OPCODE_SLOTS(CALL4, -4)
OPCODE_SLOTS(CALL5, -5)
OPCODE_SLOTS(CALL6, -6)
OPCODE_SLOTS(CALL7, -7)
OPCODE_SLOTS(CALL8, -8)
OPCODE_SLOTS(CALL9, -9)
OPCODE_SLOTS(CALL10, -10)
OPCODE_SLOTS(CALL11, -11)
OPCODE_SLOTS(CALL12, -12)
OPCODE_SLOTS(CALL13, -13)
OPCODE_SLOTS(CALL14, -14)
OPCODE_SLOTS(CALL15, -15)
OPCODE_SLOTS(CALL16, -16)
OPCODE_SLOTS(SUPER0, 0)
OPCODE_SLOTS(SUPER1, -1)
OPCODE_SLOTS(SUPER2, -2)
OPCODE_SLOTS(SUPER3, -3)
OPCODE_SLOTS(SUPER4, -4)
OPCODE_SLOTS(SUPER5, -5)
OPCODE_SLOTS(SUPER6, -6)
OPCODE_SLOTS(SUPER7, -7)
OPCODE_SLOTS(SUPER8, -8)
OPCODE_SLOTS(SUPER9, -9)
OPCODE_SLOTS(SUPER10, -10)
OPCODE_SLOTS(SUPER11, -11)
OPCODE_SLOTS(SUPER12, -12)
OPCODE_SLOTS(SUPER13, -13)
OPCODE_SLOTS(SUPER14, -14)
OPCODE_SLOTS(SUPER15, -15)
OPCODE_SLOTS(SUPER16, -16)
OPCODE_SLOTS(JUMP, 0)
OPCODE_SLOTS(LOOP, 0)
OPCODE_SLOTS(JUMP_IF_FALSE, -1)
OPCODE_SLOTS(AND, -1)
OPCODE_SLOTS(OR, -1)
OPCODE_SLOTS(CLOSE_UPVALUE, -1)
OPCODE_SLOTS(RETURN, 0)
OPCODE_SLOTS(CREATE_CLOSURE, 1)
OPCODE_SLOTS(CONSTRUCT, 0)
OPCODE_SLOTS(CREATE_CLASS, -1) 
OPCODE_SLOTS(INSTANCE_METHOD, -2)
OPCODE_SLOTS(STATIC_METHOD, -2)
OPCODE_SLOTS(END, 0)
